package teste.objetos;

import junit.framework.Assert;
import objetos.Ranking;
import objetos.Usuario;

import org.junit.Before;
import org.junit.Test;

import sistema.GerenciadorDeDados;
import factory.DAOFactory;

public class TestRanking {

	private Ranking ranking;
	private Usuario usuarioUm;
	private Usuario usuarioDois;
	private Usuario usuarioTres;
	private GerenciadorDeDados gerenciadorUsuarios;
	
	@Before
	public void setUp() throws Exception {
		this.ranking = new Ranking();
		this.usuarioUm = new Usuario("Usuario1", "UsuarioUm", "Endereco1");
		this.usuarioDois = new Usuario("Usuario2", "UsuarioDois", "Endereco2");
		this.usuarioTres = new Usuario("Usuario3", "UsuarioTres", "Endereco3");
		this.usuarioUm.adicionarAmigo(this.usuarioDois);
		this.usuarioUm.adicionarAmigo(this.usuarioTres);
		this.usuarioDois.adicionarAmigo(this.usuarioTres);
		this.gerenciadorUsuarios = new GerenciadorDeDados(DAOFactory.createUsuarioDAO());
	}
	
	@Test
	public void verificaGetRanking() throws Exception{
		this.gerenciadorUsuarios.cadastrar(usuarioUm);
		Assert.assertEquals("Usuario1", ranking.getRanking(usuarioUm, "global"));
		this.gerenciadorUsuarios.cadastrar(usuarioDois);
		Assert.assertEquals("Usuario1; Usuario2", ranking.getRanking(usuarioUm, "global"));
		this.gerenciadorUsuarios.cadastrar(usuarioTres);
		Assert.assertEquals("Usuario1; Usuario2; Usuario3", ranking.getRanking(usuarioUm, "global"));
		this.usuarioDois.adicionaEmprestimoRealizado();
		Assert.assertEquals("Usuario2; Usuario1; Usuario3", ranking.getRanking(usuarioDois, "global"));
		this.usuarioTres.adicionaEmprestimoRealizado();
		Assert.assertEquals("Usuario2; Usuario3; Usuario1", ranking.getRanking(usuarioTres, "global"));
		Assert.assertEquals("Usuario2; Usuario3; Usuario1", ranking.getRanking(usuarioUm, "amigos"));
		Assert.assertEquals("Usuario3; Usuario2", ranking.getRanking(usuarioDois, "amigos"));
		Assert.assertEquals("Usuario3", ranking.getRanking(usuarioTres, "amigos"));
		this.usuarioUm.adicionaEmprestimoRealizado();
		this.usuarioUm.adicionaEmprestimoRealizado();
		Assert.assertEquals("Usuario1; Usuario2; Usuario3", ranking.getRanking(usuarioUm, "amigos"));
		Assert.assertEquals("Usuario1; Usuario2; Usuario3", ranking.getRanking(usuarioUm, "global"));
	}

}
